home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2007 December
/
PCWKCD1207B.iso
/
Blogowanie poza sfera
/
Flock 1.0 beta
/
flock-1.0RC3.en-US.win32.exe
/
flock
/
components
/
flockHousekeeper.js
< prev
next >
Wrap
Text File
|
2007-10-18
|
6KB
|
211 lines
// vim: tabstop=2 softtabstop=2 shiftwidth=2 expandtab
//
// BEGIN FLOCK GPL
//
// Copyright Flock Inc. 2005-2007
// http://flock.com
//
// This file may be used under the terms of of the
// GNU General Public License Version 2 or later (the "GPL"),
// http://www.gnu.org/licenses/gpl.html
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// for the specific language governing rights and limitations under the
// License.
//
// END FLOCK GPL
//
const HK_CONTRACTID = '@flock.com/housekeeper;1';
const HK_CLASSID = Components.ID('{e8415493-ab17-463e-837d-8516fce89364}');
const HK_CLASSNAME = 'Flock Housekeeper';
const CATEGORY_HOUSEKEEPING = 'flockHousekeeping';
const PREF_HK_INTERVAL = 'flock.housekeeping.interval';
const DEFAULT_HK_INTERVAL = 28800;
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cr = Components.results;
function getObserverService() {
return Cc['@mozilla.org/observer-service;1']
.getService(Ci.nsIObserverService);
}
function getIntPref(prefName, defaultValue) {
try {
var prefs = Cc['@mozilla.org/preferences-service;1']
.getService(Ci.nsIPrefBranch);
return prefs.getIntPref(prefName);
}
catch (e) {
return defaultValue;
}
}
function Housekeeper() {
var obs = getObserverService();
obs.addObserver(this, 'flock-data-ready', false);
obs.addObserver(this, 'xpcom-shutdown', false);
}
Housekeeper.prototype = {
_start: function HK__start() {
this._logger = Cc['@flock.com/logger;1'].createInstance(Ci.flockILogger);
this._logger.init('housekeeper');
this._logger.info('starting up...');
var tm = Cc['@mozilla.org/updates/timer-manager;1']
.getService(Ci.nsIUpdateTimerManager);
var interval = getIntPref(PREF_HK_INTERVAL, DEFAULT_HK_INTERVAL);
tm.registerTimer('background-housekeeping-timer', this, interval);
},
_shutdown: function HK__shutdown() {
},
observe: function HK_observe(subject, topic, state) {
var obs = getObserverService();
switch (topic) {
case 'flock-data-ready':
obs.removeObserver(this, 'flock-data-ready');
this._start();
break;
case 'xpcom-shutdown':
obs.removeObserver(this, 'xpcom-shutdown');
this._shutdown();
break;
}
},
notify: function HK_notify(timer) {
this.doHousekeeping();
},
doHousekeeping: function HK_doHousekeeping() {
var catman = Cc['@mozilla.org/categorymanager;1']
.getService(Ci.nsICategoryManager);
var entries = catman.enumerateCategory(CATEGORY_HOUSEKEEPING);
while (entries.hasMoreElements()) {
try {
var entry = entries.getNext().QueryInterface(Ci.nsISupportsCString).data;
var contractID = catman.getCategoryEntry(CATEGORY_HOUSEKEEPING, entry);
this._logger.info('Running housekeeping: ' + contractID);
var service = Cc[contractID].getService(Ci.flockIHousekeeping);
service.runHousekeeping();
}
catch (e) {
this._logger.error('Error running housekeeping: ' + e);
}
}
},
getInterfaces: function HK_getInterfaces(countRef) {
var interfaces = [Ci.flockIHousekeeper, Ci.nsITimerCallback,
Ci.nsIObserver, Ci.nsIClassInfo, Ci.nsISupports];
countRef.value = interfaces.length;
return interfaces;
},
getHelperForLanguage: function HK_getHelperForLanguage(language) {
return null;
},
contractID: HK_CONTRACTID,
classDescription: HK_CLASSNAME,
classID: HK_CLASSID,
implementationLanguage: Ci.nsIProgrammingLanguage.JAVASCRIPT,
flags: Ci.nsIClassInfo.SINGLETON,
QueryInterface: function HK_QueryInterface(iid) {
if (iid.equals(Ci.flockIHousekeeper) ||
iid.equals(Ci.nsITimerCallback) ||
iid.equals(Ci.nsIObserver) ||
iid.equals(Ci.nsIClassInfo) ||
iid.equals(Ci.nsISupports))
return this;
throw Cr.NS_ERROR_NO_INTERFACE;
}
}
function GenericComponentFactory(ctor) {
this._ctor = ctor;
}
GenericComponentFactory.prototype = {
_ctor: null,
// nsIFactory
createInstance: function(outer, iid) {
if (outer != null)
throw Cr.NS_ERROR_NO_AGGREGATION;
return (new this._ctor()).QueryInterface(iid);
},
// nsISupports
QueryInterface: function(iid) {
if (iid.equals(Ci.nsIFactory) ||
iid.equals(Ci.nsISupports))
return this;
throw Cr.NS_ERROR_NO_INTERFACE;
},
};
var Module = {
QueryInterface: function(iid) {
if (iid.equals(Ci.nsIModule) ||
iid.equals(Ci.nsISupports))
return this;
throw Cr.NS_ERROR_NO_INTERFACE;
},
getClassObject: function(cm, cid, iid) {
if (!iid.equals(Ci.nsIFactory))
throw Cr.NS_ERROR_NOT_IMPLEMENTED;
if (cid.equals(HK_CLASSID))
return new GenericComponentFactory(Housekeeper)
throw Cr.NS_ERROR_NO_INTERFACE;
},
registerSelf: function(cm, file, location, type) {
var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
cr.registerFactoryLocation(HK_CLASSID, HK_CLASSNAME, HK_CONTRACTID,
file, location, type);
var catman = Cc['@mozilla.org/categorymanager;1']
.getService(Ci.nsICategoryManager);
catman.addCategoryEntry('flock-startup', HK_CLASSNAME,
'service,' + HK_CONTRACTID,
true, true);
},
unregisterSelf: function(cm, location, type) {
var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
cr.unregisterFactoryLocation(HK_CLASSID, location);
},
canUnload: function(cm) {
return true;
},
};
function NSGetModule(compMgr, fileSpec)
{
return Module;
}